<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<meta http-equiv="X-UA-Compatible" content="ie=edge" />
		<title>Document</title>
	</head>

	<body>
		<script>
			// 怎么学习 一个  方法  或者 api
			// 1. 了解方法的作用,用来干什么,语法
			// 2. 需要哪些参数,参数的 数据类型是什么
			// 3. 返回值

			// reverse()：反转数组，返回结果为反转后的数组（会改变原来的数组）。
			// 反转后的数组  =  数组.reverse();
			var arr = ["a", "b", "c", "d", "e", "f"];
			var reverseArr = arr.reverse();
			console.log(arr);
			console.log(reverseArr);

			// sort() 方法
			// sort() 方法要好好理解。 所以， 我们单独用一大段来讲。
			// sort()： 对数组的元素进行从小到大来排序（ 会改变原来的数组）。
			// sort() 方法举例： 无参时
			// 如果在使用 sort() 方法时不带参， 则默认按照Unicode 编码， 从小到大进行排序。
			// 举例 1   元素 为字符串
			var arr1 = ["e", "b", "d", "a", "f", "c"];
			console.log(arr1.sort()); // a ,b ,c ...

			// 举例 2：（当数组中的元素为数字时）
			var arr2 = [5, 2, 11, 3, 4, 1];
			console.log(arr2.sort());

			// 带参数
			// 如果在 sort()方法中带参，我们就可以自定义排序规则。

			var arr3 = [5, 2, 11, 3, 4, 1];
			arr3.sort(function(a, b) {
				// 指定排序规则
				// 从小到大排
				return a - b;
				// 根据回调函数的返回值来决定元素的排序：（ 重要）
				// 如果返回一个大于 0 的值， 则元素会交换位置
				// 如果返回一个小于 0 的值， 则元素位置不变
				// 如果返回一个 0， 则认为两个元素相等， 则不交换位置

				// 想  从大到小排
				// return b - a;
			});
			console.log(arr3);

			var users = [
				{
					name: "小明",
					height: 172,
					age: 24,
				},
				{
					name: "小张",
					height: 176,
					age: 21,
				},
				{
					name: "小红",
					height: 160,
					age: 22,
				},
				{
					name: "小王",
					height: 173,
					age: 21,
				},
				{
					name: "小赵",
					height: 173,
					age: 22,
				},
			];
			// 实现按年龄排序,年龄相同  an 身高升序
			users.sort(function(a, b) {
				if (a.age === b.age) {
					return a.height - b.height;
				} else {
					return a.age - b.age;
				}
			});
			console.log(users);

			//   slice()：从数组中提取指定的一个或者多个元素，返回结果为新的数组（不会改变原来的数组）。

			// 备注：该方法不会改变原数组，而是将截取到的元素封装到一个新数组中返回。
			// 新数组 = 原数组.slice(开始位置的索引, 结束位置的索引);
			//注意：包含开始索引，不包含结束索引
			var arr4 = ["a", "b", "c", "d", "e", "f"];
			var result1 = arr4.slice(1, 3);
			console.log(result1); // ["b", "c"]
			var result2 = arr4.slice(2); // 截取到最后
			console.log(result2); // ["c", "d", "e", "f"]
			// 数组的复制
			console.log(arr4.slice(0)); //  ["a", "b", "c", "d", "e", "f"]

			console.log(arr4.slice(-2)); //  ["e", "f"]
			console.log(arr4.slice(4, 2)); // []

			// splice()  替换或者删除
			var arr5 = ["a", "b", "c", "d", "e", "f"];
			console.log(arr5.splice(1, 2)); // [b,c]  删除的那些元素组成的数组
			console.log(arr5); // ["a", "d", "e", "f"]

			var arr6 = ["a", "b", "c", "d", "e", "f"];

			//从第index为1的位置开始不删除元素,在 index=1 的前面追加两个元素
			console.log(arr6.splice(1, 0, "不凡学院", "vae")); // ["b", "c", "d"]
			console.log(arr6);

			// indexOf() 和 lastIndexOf()：获取数据的索引

			// 索引值 = 数组.indexOf(value);

			// 索引值 = 数组.lastIndexOf(value);

			// 利用这个方法，我们可以判断某个值是否在指定的数组中。如果没找到则返回-1
			var arr7 = ["a", "b", "c", "d", "e", "d", "c"];
			console.log(arr7.indexOf("b")); // 1
			console.log(arr7.indexOf(5)); // -1
			// indexOf 是从前 匹配,找到之后不再匹配,然后返回匹配值的下标
			console.log(arr7.indexOf("c")); // 2
			// lastIndexOf 是从后往前 匹配,找到之后不再匹配,然后返回匹配值的下标
			console.log(arr7.lastIndexOf("c")); // 6
		</script>
	</body>
</html>
